package WaitNotify;


/**
 * 检验wait 和 notify方法
 */
public class TestDemo1 {
    //锁对象
    private static final Object obj = new Object();
    public static void main(String[] args) throws InterruptedException {

        Thread t1 = new Thread(()->{
           synchronized (obj){
               System.out.println("执行t1代码!!!");
               try {
                   obj.wait();//让持有锁的线程(owner)进入到waitSet等待
               } catch (InterruptedException e) {
                   e.printStackTrace();
               }
               System.out.println("t1已经唤醒!!!");
           }
        });
        Thread t2 = new Thread(()->{
            synchronized (obj){
                System.out.println("执行t2代码!!!");
                try {
                    obj.wait();//让持有锁的线程(owner)进入到waitSet等待
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("t2已经唤醒!!!");
            }
        });

        t1.start();
        t2.start();
        //等待2s之后主线程开始执行
        Thread.sleep(2000);
        //主线程唤醒正在waitSet中等待的线程
        //notify随机唤醒waitSet中的一个
        //notifyAll唤醒waitSet中的所有线程
        synchronized (obj){
            obj.notifyAll();
            t1.notify();
        }
    }


}
